//
//  OAuthViewController.swift
//  上海微博
//
//  Created by co on 16/2/27.
//  Copyright © 2016年 王南侠. All rights reserved.
//

import UIKit
import SVProgressHUD

// 身份验证控制器
class OAuthViewController: UIViewController {

    private lazy var webView = UIWebView()

    
    /// 视图的声明周期
    override func loadView() {
        view = webView
        
        // 设置导航栏
        title = "登录新浪微博"
//        navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont.systemFontOfSize(17)]
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(
            title: "取消",
            style: .Plain,
            target: self,
            action: "clickCloseButton")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(
            title: "自动填充",
            style: .Plain,
            target: self,
            action: "clickAutoFillButton")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        
        webView.delegate = self
        // 在开发中所有的View都要使用 背景颜色
        view.backgroundColor = UIColor.whiteColor()
        
        // 加载授权的 URL
        
        webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedTools.oauthUrl))
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // MARK : - 监听方法
    @objc private func clickCloseButton() {
        SVProgressHUD.dismiss()

        dismissViewControllerAnimated(true, completion: nil)
        
    }
    /// 自动填充用户信息
    @objc private func clickAutoFillButton() {
        
        let js = "document.getElementById('userId').value='18363804559';" +
        "document.getElementById('passwd').value='qqq123';"
        
        // 执行 js
        webView.stringByEvaluatingJavaScriptFromString(js)
    }


}

// MARK: - UIWebViewDelegate 代理
extension OAuthViewController: UIWebViewDelegate{
    
    /**
        将要开始加载网络请求 每次加载新的也没时.都会被调用，执行当前页面的JS不会被调用
     
     - parameter webView:        webView
     - parameter request:        request
     - parameter navigationType: 导航类型
     
     - returns: return 是否加重，通常在IOS 的dialing方法中。如果返回BOOL ，通常返回YES 一切 OK 如果 返回NO不执行
     */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 1.如果URL不是 回调地址就继续加载页面 
        // 注意回调地址是 www.baidu.com 并不是我们拼接的那个地址一定要搞清楚
        // where 语句没有智能提示 可以写写好在复制
        print(request.URL)
        if let urlString = request.URL?.absoluteString where !urlString.hasPrefix(NetworkTools.sharedTools.redirectUri){
            
        return true
            
    }
        
        // 2. 否则判断回调参数 如果授权成功 URL 的的查询字符中包含 code 参数
        // query 是URL ？ 后面的缩影内容
        // 1> 判断 query 中是否有 code=
        guard let query = request.URL?.query where query.hasPrefix("code=") else {
            
            print("取消授权")
            
            dismissViewControllerAnimated(true, completion: nil)
            
            return false

        }
        
        print("请求字符串" + query)
        
        // 2> 获得请求码
        let code = query.substringFromIndex("code=".endIndex)
        print("code = \(code)")
        
        // 3> 发起网络请求，做后续操作
        NetworkTools.sharedTools.loadAccessToken(code) { (result) -> () in  
            
            guard let result = result else {
                print("您的网络不给力")
                return
            }
            
            print(result)
            
            //设置用户的单例数据
            UserAcount.shareUserAccount.updataUserAccont(result)
            
            // 1.登录账户成功
            // 1..1通知代理工作
            NSNotificationCenter.defaultCenter().postNotificationName(CZWeiBoLoginSuccessedNotification, object: nil)
            
            SVProgressHUD.showInfoWithStatus("登录成功")
            
            dispatch_after(
                   dispatch_time(DISPATCH_TIME_NOW, Int64(Double(NSEC_PER_SEC) * 1.0)),dispatch_get_main_queue(), { () -> Void in
                    
                    // 2.关闭视图控制器
                    self.clickCloseButton()
                    
            })
            
        }
        
        return false
    }

}
